<?
/* Se asegura que el archivo es incluido por el index */
	defined( 'LOAD_MODULE_ACTION' ) or die( 'No esta permitido el acceso directo a ' . __FILE__ );  
	/* Cuando se hace el include del archivo automaticamente crea un objeto y lo guarda en una variable temporal */
		$this->oTmpObject = new Evento_contacto_exe( $this );
		
	class Evento_contacto_exe extends Exe
	{
		function Evento_contacto_exe( &$oModule )
			{
				$this->Exe( $oModule );
			}
		function import()
			{
				$oForm = $this->oModule->loadClass( 'Evento_contacto_frm' );
				$ncEvento = $oForm->aFields['ncEvento']->getValue() ;
				if( !$ncEvento )
				{
					addMessage('Falta el evento');
					return false;
				}				
				
				$aFilas = explode( "\n", file_get_contents(PATH_FILES . '/' . $oForm->aFields['cArchivo']->getValue() ) );
				$aHeader = 	$aFila = array();
				$nRow  = 1;
				// Valida la cabecera Nombre Empresa;Nombre;Apellido;Cargo;E-mail;Website;Direccion ;Telefono;Telefono Celular;Pais;Ciudad/Localidad;Actividad Empresa;Nivel del Contacto
				$aHeader = explode( ',', $aFilas[0] );
				if ( count($aHeader) == 13 )
				{
					$cSeparador = ',';
					$cDelimitador = '"';
				} else
				{
					$aHeader = explode( ';', $aFilas[0] );
					if ( count($aHeader) == 13 )
					{
						$cSeparador = ';';
						$cDelimitador = "'";
					} else
					{
						addMessage('No es un archivo valido, verifique que sea cvs y que tenga la cabecera correcta');
						return false;
					}
				}
				$nCantRows = count($aFilas);
				$ncMaxContacto= $this->oDatabase->nextKey("gtEventoContacto", "ncContacto", "ncEvento = $ncEvento");
				for( $nRow = 1; $nRow < $nCantRows ; $nRow++ )
				{
					$cFila = $aFilas[$nRow];
					unset($aFila);
					$nColumna= $nModo =  0;
					$nLen = strlen($cFila);
					for( $nIndex = 0 ; $nIndex < $nLen; $nIndex++   )
					{
						$cChar = $cFila{$nIndex};
						if ( $cChar == $cDelimitador ) 
							$nModo = ($nModo + 1) % 2; 
						else
						{
							if ( $nModo == 0 && $cChar == $cSeparador )  
								$nColumna++; 
							else
								$aFila[$nColumna] .= $cChar;
						}
					}
					$cdOrganizacion = ucwords(strtolower(trim($aFila[0]))); $cNombre = ucwords(strtolower(trim($aFila[1])));$cApellido = ucwords(strtolower(trim($aFila[2]))); $cCargo = ucwords(strtolower(trim($aFila[3])));$cEmail = strtolower(trim($aFila[4]));	$cPaginaWeb = strtolower(trim($aFila[5]));$cDireccion = ucwords(strtolower(trim($aFila[6])));$cTelefono = trim($aFila[7]);$cCelular = trim($aFila[8]);
					$cPais = ucwords(strtolower(trim($aFila[9])));$cCiudad = ucwords(strtolower(trim($aFila[10])));$cActividad = ucwords(strtolower(trim($aFila[11])));$cNivel = ucwords(strtolower(trim($aFila[12])));
					$ncOrganizacion = $this->oDatabase->getData("SELECT ncOrganizacion FROM atOrganizacion WHERE cdOrganizacion = '$cdOrganizacion' ");
					$ncActividad= $this->oDatabase->getData("SELECT ncActividad FROM acActividad WHERE cdActividad like  '%$cActividad%' ");
					$ncNivelContacto= $this->oDatabase->getData("SELECT ncNivelContacto FROM gcNivelContacto  WHERE cdNivelContacto like '%$cNivel%' ");
					if ( !$ncOrganizacion  )
					{
						$ncOrganizacion = $this->oDatabase->nextKey("atOrganizacion", "ncOrganizacion");
						$this->oDatabase->insert("atOrganizacion", "ncGrupo", 8, "ncUsuario", $this->oModule->oUserSession->getUser(), "bBaja", 0, "dDesde", Date("Y-m-d"), "ncVisibilidad", 1,"ncOrganizacion", $ncOrganizacion , "cdOrganizacion", $cdOrganizacion, 'cPaginaWeb', $cPaginaWeb );
						if ( $cTelefono || $cDireccion || $cPais || $cCiudad )
						{
							$ncDomicilio = $this->oDatabase->nextKey("atDomicilio", "ncDomicilio");
							list( $ncPais , $ncUbicacion) = $this->oDatabase->getArray("SELECT ncPais, ncUbicacion FROM acUbicacion WHERE ncTipoUbicacion = 2 AND cdUbicacion LIKE '%$cPais%' ");
							if ( !$ncPais )
							{
								$ncPais  = 8;
								$ncUbicacion  = 25;
							} else
							{
								$ncUbicacionCiudad = $this->oDatabase->getData("SELECT ncUbicacion FROM acUbicacion WHERE ncPais= $ncPais AND cdUbicacion LIKE '%$cCiudad%' ");
								if ( $ncUbicacionCiudad  ) $ncUbicacion = $ncUbicacionCiudad ; 
							}
							$this->oDatabase->insert("atDomicilio", "ncDomicilio", $ncDomicilio, "cTelefono", $cTelefono, 'ncUbicacion', $ncUbicacion, 'ncPais', $ncPais);
							if ( $cDireccion )
								$this->oDatabase->insert("atDomicilioSuburbano", "ncDomicilio", $ncDomicilio, "cDescripcion", $cDireccion);
							$this->oDatabase->insert("atOrganizacionDomicilio",  "bPorOmision", 1, "ncTipoDomicilio", 3, "dDesde", Date("Y-m-d"), "ncOrganizacion", $ncOrganizacion, "ncDomicilio", $ncDomicilio );
						}
					}
					if ( !$cApellido )
					{
						if ( strpos( $cNombre,  ',' ) > 0 ) 
							list( $cApellido, $cNombre ) = explode( ',', $cNombre) ;
						elseif ( substr_count( $cNombre,  ' ' ) == 1 ) 
							list( $cNombre , $cApellido) = explode( ' ', $cNombre) ;
						else
							$cApellido =' ';
					}
					$ncPersona = $this->oDatabase->getData("SELECT ncPersona FROM atPersona WHERE cNombre =  '$cNombre' AND cApellido = '$cApellido' ");
					if ( !$ncPersona )
					{
						$ncPersona = $this->oDatabase->nextKey("atPersona", "ncPersona");
						$this->oDatabase->insert("atPersona", "ncGrupo", 8, "ncUsuario", $this->oModule->oUserSession->getUser(), "bBaja", 0, "dDesde", Date("Y-m-d"), "ncVisibilidad", 1, "ncPersona", $ncPersona , "cNombre", $cNombre, 'cApellido', $cApellido, 'cCelular', $cCelular);
					}
					$nqLaboral = $this->oDatabase->getData("SELECT count(*) FROM atOrganizacionPersona WHERE ncPersona =  $ncPersona AND ncOrganizacion = $ncOrganizacion ");
					if ($nqLaboral == 0 )
					{ 
						$this->oDatabase->insert("atOrganizacionPersona", "ncGrupo", 8, "bBaja", 0,"dDesde", Date("Y-m-d"), "ncVisibilidad", 1,"ncPersona", $ncPersona , "ncOrganizacion", $ncOrganizacion, "ncDomicilio", $ncDomicilio, 'cCargo', $cCargo, 'cCelular', $cCelular);
					}
					if ( $ncPersona && $cEmail ) 
						$this->oDatabase->insert("atPersonaEmail", "ncOrden", 1, $ncPersona, "cEmail", $cEmail, "ncOrganizacion", $ncOrganizacion );
					$nqContacto = $this->oDatabase->getData("SELECT count(*) FROM gtEventoContacto WHERE ncPersona =  $ncPersona AND ncOrganizacion = $ncOrganizacion ");
					if ( $nqContacto  == 0 )
						$this->oDatabase->insert("gtEventoContacto", "ncEvento", $ncEvento, "ncContacto", $ncMaxContacto+ $nRow, "ncPersona", $ncPersona , "ncOrganizacion", $ncOrganizacion, "ncActividad", $ncActividad, "ncNivelContacto", $ncNivelContacto);
				}
			}
		// MODIFICAR_EVENTO
		function update()
			{
				// Convierte a variables los datos del Formulario asociado a la accion
				$oForm = $this->oModule->loadClass( 'Evento_contacto_frm' );
				extract( $oForm->getFieldArray() );
				if ( $ncOrganizacion && $ncPersona )
				{
					$oModAdministracion =& loadModule( 'administracion' );
					$oModAdministracion->setSubModule('entidades' );
					$oExe = $oModAdministracion->loadClass( 'organizacion_persona_exe' );
					$oExe->save();
				}				
				// Modifica el Registro de Evento
					$this->oDatabase->update("gtEventoContacto",
									"ncActividad", $ncActividad ,
									"ncNivelContacto", $ncNivelContacto ,
									"ncPersona", $ncPersona ,
									"ncOrganizacion", $ncOrganizacion,
									"WHERE",
									"ncContacto", $ncContacto,
									"ncEvento", $ncEvento );
				// Agrega los rotulos
				$bOk = $this->oDatabase->delete( "gtContactoRotulo", "ncContacto", $ncContacto, "ncEvento", $ncEvento );
				
				$aRotulo = $oForm->aFields['aRotulo']->getValue();
				foreach ( $aRotulo as $ncRotulo )
				{
					$bOk = $this->oDatabase->insert( "gtContactoRotulo",
											"ncRotulo", $ncRotulo,
											"ncContacto", $ncContacto,
											"ncEvento", $ncEvento );
				}
				$oForm->reset();
			}
	function updateTag()
		{
			$ncEvento= getParam( 'ncEvento' );
			$ncContacto= getParam( 'ncContacto' );
			$ncRotulo = getParam( 'ncRotulo' );
			$cNewItem = getParam( 'newItem' );
			if ( $cNewItem ) 
			{
				$ncRotulo = $this->oDatabase->nextKey( "gtRotuloContacto", "ncRotulo" );
				$bOk = $this->oDatabase->insert( "gtRotuloContacto", 
										"ncRotulo", $ncRotulo, "cdRotulo", $cNewItem );
			}
			if ( $ncEvento && $ncContacto && $ncRotulo )
			{
				$bOk = $this->oDatabase->insert( "gtContactoRotulo",
										"ncRotulo", $ncRotulo, "ncContacto", $ncContacto, "ncEvento", $ncEvento );
			}
		}
			
		// AGREGAR_EVENTO
		function insert()
			{
				// Convierte a variables los datos del Formulario asociado a la accion
				$oForm = $this->oModule->loadClass( 'Evento_contacto_frm' );
				// Si ingreso ni organizacion ni persona => error
				/*
				if ( !$ncOrganizacion && !$ncContacto )
				{
					addMessage("Debe ingresar una organizacion y/o una persona");
					return false;
				}
				*/
				extract( $oForm->getFieldArray() );
				// Si ingreso la Organizacion & la Persona => Agrega los datos laborales
				if ( $ncOrganizacion && ( $ncPersona || ( $cNombre  && $cApellido ) ) )
				{
					$oModAdministracion =& loadModule( 'administracion' );
					$oModAdministracion->setSubModule('entidades' );
					$oExe = $oModAdministracion->loadClass( 'organizacion_persona_exe' );
					$oExe->save();
					extract( $oForm->getFieldArray() );
				}
				// Agrega la Persona / Organizacion al Evento
					$ncContacto = $this->oDatabase->nextKey("gtEventoContacto","ncContacto", "ncEvento=$ncEvento");
					$this->oDatabase->insert("gtEventoContacto",
									"ncNivelContacto", $ncNivelContacto ,
									"ncActividad", $ncActividad ,
									"ncPersona", $ncPersona ,
									"ncUsuario", $this->oModule->oUserSession->getUser(),
									"ncOrganizacion", $ncOrganizacion,
									"ncContacto", $ncContacto,
									"ncEvento", $ncEvento );
				// Agrega los rotulos
				$aRotulo = $oForm->aFields['aRotulo']->getValue();
				foreach ( $aRotulo as $ncRotulo )
				{
					$bOk = $this->oDatabase->insert( "gtContactoRotulo",
											"ncRotulo", $ncRotulo,
											"ncContacto", $ncContacto,
											"ncEvento", $ncEvento );
				}
			}
		// ELIMINAR_EVENTO
		function delete()
			{
				$ncEvento 	= getParam( 'ncEvento' );
				$ncContacto = getParam( 'ncContacto' );
				if ( $ncEvento && $ncContacto )
				{
					$this->oDatabase->delete( "gtEventoContacto", "ncContacto", $ncContacto , "ncEvento", $ncEvento );
				}
			}
	}
?>
